//package net.sahv.wamdy.coder;
//
//import java.io.File;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.OutputStreamWriter;
//import java.sql.Connection;
//import java.sql.SQLException;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Map.Entry;
//import java.util.Properties;
//import java.util.Set;
//
//import net.sahv.bdyz.util.TableInfomationUtil;
//import freemarker.template.Configuration;
//import freemarker.template.Template;
//import freemarker.template.TemplateException;
///**
// * freeMarker批量生成项目文件
// * @author 张天敏
// * @date 日期：2016年9月9日 时间：下午1:56:34
// */
//public class CodeMaker
//{
//	private static int createCount=0;
//	public static void main(String [] args)
//	{
//		try
//		{
//			//创建所有表的相关文件
//			//process();
//			//创建单张表的相关文件
//			process("aa");
//		}catch(Exception e)
//		{
//			e.printStackTrace();
//		}
//	}
//	
//	/**
//	 * 创建单张表的相关文件
//	 * @author 张天敏
//	 * @date 日期：2016年9月9日 时间：下午1:55:53
//	 * @param string
//	 * @throws IOException 
//	 * @throws FileNotFoundException 
//	 * @throws SQLException 
//	 * @throws TemplateException 
//	 */
//	private static void process(String string) throws FileNotFoundException, IOException, SQLException, TemplateException {
//		//加载配置文件
//		Properties p = loadCfg();
//		String tableSingleName=TableInfomationUtil.changeTableName(string.trim());
//		//加载数据库信息
//		Map<String,Object> mapEntity=loadMapEntity();
//		//循环遍历生成代码
//		Set<Entry<String, Object>> entrySetMap=mapEntity.entrySet();
//		Iterator<Entry<String, Object>> iteratorEntryMap=entrySetMap.iterator();
//		while(iteratorEntryMap.hasNext()){
//			Entry<String, Object> entryMap=iteratorEntryMap.next();
//			//查找相似的表名，生成对应的相关文件
//			if(tableSingleName.equals(entryMap.getKey())){
//				makeCode(entryMap);
//			}
//		}
//		System.out.println("文件创建完成，共创建"+createCount+"个文件。");
//	}
//
//	/**
//	 * 创建所有表的相关文件
//	 * @author 张天敏
//	 * @date 日期：2016年9月9日 时间：下午1:56:09
//	 * @throws Exception
//	 */
//	public static void process() throws Exception
//	{
//		//加载配置文件
//		Properties p = loadCfg();
//		//加载数据库信息
//		Map<String,Object> mapEntity=loadMapEntity();
//		//循环遍历生成代码
//		Set<Entry<String, Object>> entrySetMap=mapEntity.entrySet();
//		Iterator<Entry<String, Object>> iteratorEntryMap=entrySetMap.iterator();
//		while(iteratorEntryMap.hasNext()){
//			Entry<String, Object> entryMap=iteratorEntryMap.next();
//			makeCode(entryMap,p);
//		}
//		System.out.println("文件创建完成，共创建"+createCount+"个文件。");
//		
//	}
//	
//	/**
//	 * @author 张天敏
//	 * @date 日期：2016年9月8日 时间：上午11:27:34
//	 * @return
//	 * @throws SQLException
//	 */
//	private static Map<String, Object> loadMapEntity() throws SQLException {
//		//连接数据库
//		Connection conn=TableInfomationUtil.getConnection();
//		//获取对应的表的字段名
//		Map<String,Object> mapEntity=TableInfomationUtil.getTableInfomation(conn);
//		return mapEntity;
//	}
//
//	public static Properties loadCfg() throws FileNotFoundException, IOException
//	{
//		Properties p = new Properties();
//		
//		System.out.println(CodeMaker.class.getResource("/conf/path.properties").toExternalForm());
//		p.load(CodeMaker.class.getResource("/conf/path.properties").openStream());
//		return p;
//	}
//	
//	public static void makeCode(Entry<String, Object> entryMap, Properties p) throws IOException, TemplateException
//	{
//		//输出文件路径:F:\MyDocument\学习\JAVA\MyEclipseWorkSpaces\SSH
//		String basePath = p.getProperty("outputLocation");
//		//添加包路径：src    即包路径：F:\MyDocument\学习\JAVA\MyEclipseWorkSpaces\SSH\src
//		String srcFolder = p.getProperty("srcFolderName");
//		//WebRoot路径：    WebRoot/
//		String webRootFolder = p.getProperty("webRootFolderName");
//		//java包名
//		String basePackage = p.getProperty("package.entity");
//		//java类名
//		String className =entryMap.getKey();
//		//java代码存放路径
//		String javaCodeLocation = basePath + srcFolder + basePackage.replace(".", "/");
//		
//		//生成文件夹
//		String entityFolderLocation = javaCodeLocation + "/model/";
//		String serviceFolderLocation = javaCodeLocation + "/service/";
//		String mapperFolderLocation = javaCodeLocation + "/mapper/";
//		String controllerFolderLocation = javaCodeLocation + "/controller/";
//		String pageCodeLocation = basePath + webRootFolder+entryMap.getKey()+"/";
//		
//		String[] folders = new String[] {entityFolderLocation,serviceFolderLocation,mapperFolderLocation,controllerFolderLocation,pageCodeLocation};
//		makeFolders(folders);
//		//只输出实体类文件流
//		FileOutputStream [] foss = new FileOutputStream[ ]{
//				new FileOutputStream(entityFolderLocation + className + ".java"),
//				new FileOutputStream(serviceFolderLocation + className + "Service.java"),
//				new FileOutputStream(mapperFolderLocation + className + "Mapper.java"),
//				new FileOutputStream(mapperFolderLocation + className + "Mapper.xml"),
//				new FileOutputStream(controllerFolderLocation + className + "Controller.java"),
//				new FileOutputStream(pageCodeLocation + className + "List.jsp"),
//				new FileOutputStream(pageCodeLocation +"insert"+ className + ".jsp"),
//				new FileOutputStream(pageCodeLocation +"update"+ className + ".jsp")
//		};
//		createCount+=foss.length;
//		Configuration cfg = new Configuration();
//		cfg.setClassForTemplateLoading(CodeMaker.class, p.getProperty("templatesLocation")); // 指定模板所在的classpath目录
//		
//		//只生成实体类
//		Template [] templates = new Template[ ]{
//				cfg.getTemplate("Entity.jtl"),    // 指定实体模板
//				cfg.getTemplate("Service.jtl"), // 指定服务模板
//				cfg.getTemplate("Mapper.jtl"), // 指定Mapper中的Java模板
//				cfg.getTemplate("Mapper.xml.jtl"), // 指定Mapper中的xml模板
//				cfg.getTemplate("Controller.jtl"), // 指定Controller模板
//				cfg.getTemplate("List.jsp.jtl"), // 指定list.jsp模板
//				cfg.getTemplate("Insert.jsp.jtl"), // 指定insert.jsp模板
//				cfg.getTemplate("Update.jsp.jtl") // 指定update.jsp模板
//		};
//		
//		Map<String,Object> map=dataConversion(entryMap);
//		
//		for(int i = 0; i < templates.length; i++)
//		{
//			templates[i].process(map, new OutputStreamWriter(foss[i], "utf-8"));
//			foss[i].flush();
//			foss[i].close();
//		}
//		return;
//	}
//	
//	public static void makeCode(Entry<String, Object> entryMap) throws IOException, TemplateException
//	{
//		System.out.println(CodeMaker.class.getResource("").toExternalForm());
//		String classTruePath=CodeMaker.class.getResource("").toExternalForm();
//		String[] classTruePathArray=classTruePath.split("/");
//		boolean flag=true;
//		String basePath="";
//		for(int i=0,stringLength=classTruePathArray.length;i<stringLength;i++){
//			if(i==0){
//				continue;
//			}
//			if(classTruePathArray[i].equals("target")){
//				flag=false;
//			}
//			if(flag){
//				basePath+=classTruePathArray[i]+"/";
//			}
//		}
//		System.out.println(basePath);
//		String srcFolder = "src/main/java/";
//		//WebRoot路径：    WebRoot/
//		String webRootFolder = "src/main/webapp/WEB-INF/views/admin/";
//		//java包名
//		String basePackage = "net/sahv/bdyz";
//		//java类名
//		String className =entryMap.getKey();
//		//java代码存放路径
//		String javaCodeLocation = basePath + srcFolder + basePackage;
//		
//		//生成文件夹
//		String entityFolderLocation = javaCodeLocation + "/model/";
//		String serviceFolderLocation = javaCodeLocation + "/service/";
//		String mapperFolderLocation = javaCodeLocation + "/mapper/";
//		String controllerFolderLocation = javaCodeLocation + "/controller/";
//		//将jsp包文件转换成首字母小写
//		String jspFolder=entryMap.getKey().substring(0,1).toLowerCase()+entryMap.getKey().substring(1, entryMap.getKey().length());
//		String pageCodeLocation = basePath + webRootFolder+jspFolder+"/";
//		
//		String[] folders = new String[] {entityFolderLocation,serviceFolderLocation,mapperFolderLocation,controllerFolderLocation,pageCodeLocation};
//		makeFolders(folders);
//		//只输出实体类文件流
//		FileOutputStream [] foss = new FileOutputStream[ ]{
//				new FileOutputStream(entityFolderLocation + className + ".java"),
//				new FileOutputStream(serviceFolderLocation + className + "Service.java"),
//				new FileOutputStream(mapperFolderLocation + className + "Mapper.java"),
//				new FileOutputStream(mapperFolderLocation + className + "Mapper.xml"),
//				new FileOutputStream(controllerFolderLocation + className + "Controller.java"),
//				new FileOutputStream(pageCodeLocation + jspFolder + "List.jsp"),
//				new FileOutputStream(pageCodeLocation +"insert"+ className + ".jsp"),
//				new FileOutputStream(pageCodeLocation +"update"+ className + ".jsp")
//		};
//		createCount+=foss.length;
//		Configuration cfg = new Configuration();
//		cfg.setClassForTemplateLoading(CodeMaker.class, "/conf/templates/"); // 指定模板所在的classpath目录
//		
//		//只生成实体类
//		Template [] templates = new Template[ ]{
//				cfg.getTemplate("Entity.jtl"),    // 指定实体模板
//				cfg.getTemplate("Service.jtl"), // 指定服务模板
//				cfg.getTemplate("Mapper.jtl"), // 指定Mapper中的Java模板
//				cfg.getTemplate("Mapper.xml.jtl"), // 指定Mapper中的xml模板
//				cfg.getTemplate("Controller.jtl"), // 指定Controller模板
//				cfg.getTemplate("List.jsp.jtl"), // 指定list.jsp模板
//				cfg.getTemplate("Insert.jsp.jtl"), // 指定insert.jsp模板
//				cfg.getTemplate("Update.jsp.jtl") // 指定update.jsp模板
//		};
//		
//		Map<String,Object> map=dataConversion(entryMap);
//		
//		for(int i = 0; i < templates.length; i++)
//		{
//			templates[i].process(map, new OutputStreamWriter(foss[i], "utf-8"));
//			foss[i].flush();
//			foss[i].close();
//		}
//		return;
//	}
//	
//	/**
//	 * @author 张天敏
//	 * @date 日期：2016年9月8日 时间：下午5:14:48
//	 * @param entryMap
//	 * @return
//	 */
//	private static Map<String, Object> dataConversion(Entry<String, Object> entryMap) {
//		//实体类中的小写主键
//		String primaryKey="";
//		//数据库中的大写主键
//		String primaryKeyUp="";
//		//在数据库中数据表的表名，这个是要写在mapper文件中的
//		String tableNameXml="";
//		//表名，首字母小写
//		String tableNameSmall=entryMap.getKey().substring(0, 1).toLowerCase()+entryMap.getKey().substring(1, entryMap.getKey().length());
//		List<Map<String,Object>> listEntry=(List<Map<String, Object>>) entryMap.getValue();
//		for(Map<String,Object> listEntryOne:listEntry){
//			int index=(int) listEntryOne.get("ordinalPosition");
//			if(index==1){
//				primaryKey=(String) listEntryOne.get("COLUMN_NAME");
//				primaryKeyUp=(String) listEntryOne.get("columnName");
//				tableNameXml=(String) listEntryOne.get("tableName");
//			}
//		}
//		
//		Map<String,Object> map=new HashMap<String, Object>();
//		map.put("tableName", entryMap.getKey());
//		map.put("tableNameSmall", tableNameSmall);
//		map.put("tableNameXml", tableNameXml);
//		map.put("primaryKey", primaryKey);
//		map.put("primaryKeyUp", primaryKeyUp);
//		map.put("columnElements", entryMap.getValue());
//		map.put("jspPath", "${pageContext.request.contextPath}");
//		return map;
//	}
//
//	private static void makeFolders(String [] folders)
//	{
//		for(int i = 0; i < folders.length; i++)
//		{
//			createFile(new File(folders[i]));
//		}
//	}
//	
//	public static void createFile(File file)
//	{
//		if(file == null)
//		{
//			return;
//		}
//		File parentFile = file.getParentFile();
//		createFile(parentFile);
//		if(!file.exists())
//		{
//			file.mkdir();
//			System.out.println("创建不存在的文件夹：" + file);
//		}
//	}
//}
